//! # Microsoft 6502 BASIC Interpreter in Rust
//!
//! 这是一个用现代Rust语言重新实现的具有历史意义的Microsoft 6502 BASIC解释器。
//! 该项目旨在保存计算历史，并展示从早期个人计算机到现代编程语言的技术演进。

#![cfg_attr(not(test), no_std)] // 为嵌入式目标启用 no_std

#[cfg(not(test))]
extern crate alloc;

// 模块声明
pub mod basic;
pub mod cpu;
pub mod io;
pub mod memory;

// 平台特定模块
#[cfg(feature = "web")]
pub mod platforms/web;

#[cfg(feature = "native")]
pub mod platforms/native;

#[cfg(feature = "embedded")]
pub mod platforms/embedded;

// 公共类型和特质
pub type Address = u16;
pub type Byte = u8;
pub type Word = u16;

/// 模拟器错误类型
#[derive(Debug, thiserror::Error)]
pub enum EmulatorError {
    #[error("Invalid memory access at address: {0:04X}")]
    InvalidMemoryAccess(Address),
    
    #[error("Invalid opcode encountered: {0:02X}")]
    InvalidOpcode(Byte),
    
    #[error("I/O error: {0}")]
    IoError(String),
    
    #[error("Unimplemented feature: {0}")]
    Unimplemented(String),
}

/// 结果类型别名
pub type Result<T> = core::result::Result<T, EmulatorError>;